﻿using System;
using System.Data;
using System.Data.SqlClient;
using prjKQXS_DLL.Hop_dong;

namespace prjKQXS_DLL.Danh_muc
{
    public class clsChuyenDL
    {
        /// <summary>
        /// Cài đặt event OnError để bắt các lỗi chưa được xử lý
        /// </summary>
        /// <param name="e"></param>
        public delegate void OnErrorHandler(Exception e);
        public event OnErrorHandler OnError;

        /// <summary>
        /// Cài đặt event OnAction để thông báo các trạng thái kết quả
        /// </summary>
        /// <param name="e"></param>
        public delegate void OnActionHandler(SqlException e);
        public event OnActionHandler OnAction;

        #region Methods ==============================================================
        /// <summary>
        /// Dùng tại frmChuyen
        /// </summary>
        /// <param name="madl"></param>
        /// <param name="HopDongID"></param>
        /// <returns></returns>
        public static bool checkMaDL(string madl, int HopDongID)
        {
            bool ok = true;

            if (clsHopDong.checkMaDL(madl) == 1)    //Nếu MÃ ĐẠI LÝ bị trùng với một đại lý đang hoạt động...
            {
                //... thì kiểm tra xem đó có phải là mã đại lý gốc hay không, nếu đúng thì cho chuyển (ok = true), nếu sai thì ok = false.
                string sql = @" SELECT HD.ID
                                FROM vChuyenDL C INNER JOIN vHOPDONG HD ON HD.ID = C.HopDongID
                                WHERE HD.Ma_DaiLy = '" + madl + "' and HopDongID = " + HopDongID;
                DataTable dt = clsCommon.FillData(sql);
                ok = dt.Rows.Count > 0;
            }

            return ok;
        }

        /// <summary>
        /// Hàm này kiểm tra xem ngày Ngay thì HopDongID có bị chuyển hay không. 
        /// <para>Nếu có thì trả về false, nếu không trả về true.</para>
        /// </summary>
        /// <param name="Ngay"></param>
        /// <param name="HopDongID"></param>
        /// <returns></returns>
        public static bool checkNgay(DateTime Ngay, int HopDongID)
        {
            string sql = "SELECT ID FROM tblChuyenDL WHERE Ngay = '" + Ngay.ToString("yyyy-MM-dd") + "' and HopDongID = " + HopDongID;
            DataTable dt = clsCommon.FillData(sql);
            return dt.Rows.Count == 0;
        }

        /// <summary>
        /// Hàm này trả về bảng dữ liệu nguồn cho gvDL. Dùng tại frmNhatKyChuyenDL
        /// </summary>
        /// <param name="isKhoiPhuc"></param>
        /// <returns></returns>
        public DataTable loadData(bool isKhoiPhuc)
        {
            DataTable dt = new DataTable();

            try
            {
                SqlConnection conn = new SqlConnection(BienTc.connString);
                conn.Open();

                SqlDataAdapter da = new SqlDataAdapter("proc_ChuyenDL_loadData", conn);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                if (isKhoiPhuc) da.SelectCommand.Parameters.AddWithValue("@isPublic", 0);
                else da.SelectCommand.Parameters.AddWithValue("@isPublic", 1);
                da.Fill(dt);
            }
            catch (SqlException e)
            {
                OnAction(e);
            }
            catch (Exception e)
            {
                OnError(e);
            }

            return dt;
        }

        public int Insert(int HopDongID, int DMCanBoID, string MaDLMoi)
        {
            int i = 0;

            if (clsLicense.checkLicense())
            {
                try
                {
                    SqlConnection conn = new SqlConnection(BienTc.connString);
                    conn.Open();
                    SqlCommand cmd = new SqlCommand("proc_ChuyenDL_Insert", conn);
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.AddWithValue("@Ngay", DateTime.Now.Date);
                    cmd.Parameters.AddWithValue("@HopDongID", HopDongID);
                    cmd.Parameters.AddWithValue("@DMCanBoID", DMCanBoID);
                    cmd.Parameters.AddWithValue("@MaDLMoi", MaDLMoi);

                    i = cmd.ExecuteNonQuery();
                }
                catch (SqlException e)
                {
                    OnAction(e);
                }
                catch (Exception e)
                {
                    OnError(e);
                }
            }

            return i;
        }

        public void Update(DataRow dr)
        {
            if (clsLicense.checkLicense())
            {
                try
                {
                    SqlConnection conn = new SqlConnection(BienTc.connString);
                    conn.Open();
                    SqlCommand cmd = new SqlCommand("proc_ChuyenDL_Update", conn);
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.AddWithValue("@ChuyenDL_ID", dr["ID"]);
                    cmd.Parameters.AddWithValue("@Ngay", dr["TuNgay"]);

                    int i = cmd.ExecuteNonQuery();
                }
                catch (SqlException e)
                {
                    OnAction(e);
                }
                catch (Exception e)
                {
                    OnError(e);
                }
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="ID">tblChuyenDL.ID</param>
        /// <param name="canRestore"></param>
        public void Delete(int ID, bool canRestore)
        {
            if (clsLicense.checkLicense())
            {
                try
                {
                    SqlConnection sqlconn = new SqlConnection(BienTc.connString);
                    sqlconn.Open();
                    SqlCommand cmd;

                    if (canRestore)
                    {
                        cmd = new SqlCommand("UPDATE tblChuyenDL SET isPublic = 0 Where ID = " + ID + " and isPublic=1", sqlconn);
                    }
                    else
                    {
                        cmd = new SqlCommand("DELETE tblChuyenDL WHERE ID = " + ID + " and isPublic = 0", sqlconn);
                    }

                    int i = cmd.ExecuteNonQuery();
                }
                catch (SqlException e)
                {
                    OnAction(e);
                }
                catch (Exception e)
                {
                    OnError(e);
                }
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="ID">tblChuyenDL.ID</param>
        public void Restore(int ID)
        {
            if (clsLicense.checkLicense())
            {
                try
                {
                    SqlConnection sqlconn = new SqlConnection(BienTc.connString);
                    sqlconn.Open();
                    SqlCommand cmd;

                    cmd = new SqlCommand("UPDATE tblChuyenDL SET isPublic = 1 Where ID = " + ID + " and isPublic = 0", sqlconn);
                    int i = cmd.ExecuteNonQuery();
                }
                catch (SqlException e)
                {
                    OnAction(e);
                }
                catch (Exception e)
                {
                    OnError(e);
                }
            }
        }
        #endregion Methods ===========================================================
    }
}
